package dao

import (
	"time"
)

// 这是 GcttIssue 的全局公开dao对象，被service层调用!
var GcttIssueDao = gcttIssueDao{}

// GCTT github 选题 issue 列表
// 这是 gctt_issue表 的实体类,这个实体类中的字段可以减少，但是不能在其基础上增加!
type GcttIssue struct {
	Id            int32     `json:"id" form:"id" db:"id" v:"id"`                                                 // 选题的 issue 编号
	Translator    string    `json:"translator" form:"translator" db:"translator" v:"translator"`                 // 译者 github 用户名
	Email         string    `json:"email" form:"email" db:"email" v:"email"`                                     // 译者邮箱
	Title         string    `json:"title" form:"title" db:"title" v:"title"`                                     // issue标题
	TranslatingAt int32     `json:"translating_at" form:"translating_at" db:"translating_at" v:"translating_at"` // 开始翻译时间
	TranslatedAt  int32     `json:"translated_at" form:"translated_at" db:"translated_at" v:"translated_at"`     // 完成翻译时间
	Label         string    `json:"label" form:"label" db:"label" v:"label"`                                     // 标签,如:已认领,待认领
	Status        int8      `json:"status" form:"status" db:"status" v:"status"`                                 // 0-opened;1-closed
	CreatedAt     time.Time `json:"created_at" form:"created_at" db:"created_at" v:"created_at"`
}

// 注意:这是 GcttIssue 的私有dao对象，只能在dao层内使用!
type gcttIssueDao struct {
	InsertTemplate func(arg GcttIssue) (int64, error)           //插入一条记录
	UpdateTemplate func(arg GcttIssue) (int64, error)           //更新一条记录
	DeleteTemplate func(id int64) (int64, error)                `arg:"id"` //根据传入的主键删除一条记录
	SelectTemplate func(id int64) (GcttIssue, error)            `arg:"id"` //根据传入的主键获取一条记录
	List           func(arg GcttIssueList) ([]GcttIssue, error) //模糊分页查询
}

/*
// 这是 gctt_issue 表的Postman测试参数
// 该结构体中的字段就是: 前后端交互的json字段!
type GcttIssuePostman struct {
id
translator
email
title
translating_at
translated_at
label
status
created_at

}*/

// 这是 gctt_issue 表的批量请求参数
type GcttIssueReq struct {
	List []GcttIssue `json:"list" form:"list"`
}

// 这是 gcttIssueDao.List()方法的请求参数
type GcttIssueList struct {
	Page
}
